/*!
 * MindPlus
 * mpython
 *
 */
#include <MPython.h>
#include <DFRobot_Iot.h>
#include <DFRobot_DS18B20.h>
#include <DFRobot_HuskyLens.h>
#include <mPython_tinywebdb.h>

// 动态变量
String         mind_s_name;
volatile float mind_n_Temp, mind_n_ShangYiCiShiBieJieGuo;
// 函数声明
void DF_RenLianShiBieCeWen();
void DF_LianJieWiFI();
void DF_LianJieMQTT();
// 静态常量
const String topics[5] = {"yourTopic","","","",""};	//这里是EasyIoT的Topic，更换为自己的即可
// 创建对象
DFRobot_HuskyLens huskylens;
DFRobot_DS18B20   ds18b20_P0;
DFRobot_Iot       myIot;
mPython_TinyWebDB mydb;


// 主程序开始
void setup() {
	mPython.begin();
	ds18b20_P0.begin(P0);
	DF_LianJieWiFI();
	delay(500);
	DF_LianJieMQTT();
	mydb.setServerParameter("http://tinywebdb.appinventor.space/api", "yourUser","yourSecret");	//将用户名和密钥替换为自己的
	huskylens.beginI2CUntilSuccess();
	huskylens.writeAlgorithm(ALGORITHM_FACE_RECOGNITION);
	display.fillScreen(0);
	display.setCursorLine(1);
	display.printLine("请面向摄像头进行识别");
}
void loop() {
	huskylens.request();
	if (huskylens.isAppearDirect(HUSKYLENSResultBlock)) {
		if (huskylens.isLearned(huskylens.readBlockCenterParameterDirect().ID)) {
			DF_RenLianShiBieCeWen();
			myIot.publish(topic_0, (String(mind_s_name) + String((String(" 体温：") + String((String(mind_n_Temp) + String("℃")))))));
			mind_n_ShangYiCiShiBieJieGuo = 1;
		}
		else {
			if ((mind_n_ShangYiCiShiBieJieGuo==1)) {
				display.fillScreen(0);
				display.setCursorLine(1);
				display.printLine("非本社区人员，请登记");
				mind_n_ShangYiCiShiBieJieGuo = 0;
			}
		}
	}
}


// 自定义函数
void DF_RenLianShiBieCeWen() {
	mind_s_name = mydb.getTag((String(huskylens.readBlockCenterParameterDirect().ID)));
	display.fillInLine(1, 0);
	display.setCursorLine(1);
	display.printLine(mind_s_name);
	display.setCursorLine(2);
	display.printLine("请保持面向摄像头");
	display.fillInLine(3, 0);
	display.setCursorLine(3);
	display.printLine("3s后开始测温");
	delay(1000);
	display.setCursorLine(3);
	display.printLine("2s后开始测温");
	delay(1000);
	display.setCursorLine(3);
	display.printLine("1s后开始测温");
	delay(1000);
	display.fillInLine(3, 0);
	display.setCursorLine(3);
	display.printLine("开始测温");
	display.fillInLine(4, 0);
	mind_n_Temp = ds18b20_P0.getTempC();
	display.setCursorLine(4);
	display.printLine((String(mind_n_Temp) + String("℃")));
}
void DF_LianJieWiFI() {
	myIot.wifiConnect("yourSSID", "yourPASSWD");	//将WiFi替换为自己的
	display.setCursorLine(1);
	display.printLine("WiFi连接ing");
	while (!myIot.wifiStatus()) {yield();}
	display.setCursorLine(1);
	display.printLine("WiFi连接成功");
	display.setCursorLine(2);
	display.printLine(myIot.getWiFiLocalIP());
}
void DF_LianJieMQTT() {
	myIot.init("iot.dfrobot.com.cn","yourIot_id","","yourIot_pwd",topics,1883);		//将用户名、用户密码替换为自己的
	myIot.connect();
	display.setCursorLine(3);
	display.printLine("MQTT连接ing");
	while (!myIot.connected()) {yield();}
	display.fillInLine(3, 0);
	display.setCursorLine(3);
	display.printLine("MQTT连接成功");
}